package com.cg.leetcode;

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * 387.字符串中的第一个唯一字符
 *
 * @program: LeetCode->LeetCode_387
 * @description: 387.字符串中的第一个唯一字符
 * @author: cg
 * @create: 2021-08-31 16:31
 **/
public class LeetCode_387 {

    @Test
    public void test387() {
        System.out.println(firstUniqChar("leetcode"));
    }

    /**
     * 给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
     *
     * 示例：
     * s = "leetcode"
     * 返回 0
     * s = "loveleetcode"
     * 返回 2
     *
     * 提示：你可以假定该字符串只包含小写字母。
     * @param s
     * @return
     */
    public int firstUniqChar(String s) {
        //使用map集合解决
        Map<Character, Integer> map = new HashMap();
        char[] chars = s.toCharArray();
        //先统计每个字符的数量
        for (char ch : chars) {
            map.put(ch, map.getOrDefault(ch, 0) + 1);
        }
        //然后在遍历字符串s中的字符，如果出现次数是1就直接返回
        for (int i = 0; i < s.length(); i++) {
            if (map.get(chars[i]) == 1) {
                return i;
            }
        }
        return -1;
    }
    /*public int firstUniqChar(String s) {
        //两次遍历解决
        int[] count = new int[26];
        char[] chars = s.toCharArray();
        //先统计每个字符出现的次数
        for (int i = 0; i < s.length(); i++) {
            count[chars[i] - 'a']++;
        }
        //然后在遍历字符串s中的字符，如果出现次数是1就直接返回
        for (int i = 0; i < s.length(); i++) {
            if (count[chars[i] - 'a'] == 1) {
                return i;
            }
        }
        return -1;
    }*/

}
